/*
 * ExtratorTerminos.cpp
 *
 *  Created on: 27/09/2011
 *      Author: nestor
 */

#include "ExtratorTerminos.h"
#include "../../../Util/Configuracion.h"

ExtratorTerminos::ExtratorTerminos() {
	this->archivos.open(FILENAME_RUTA_ARCHIVOS, std::ios_base::out|std::ios_base::app);
	this->nroUltimoArchivo = 0; // recuperar la meta data de archivos;
}

long int ExtratorTerminos::extraer(std::string & ruta, Lista<std::string> * listaTerminos) {
	std::ifstream archivo(ruta.c_str(), std::ios_base::in);
	if (archivo.is_open()) {
		while (archivo.good()) {
			std::string linea;
			getline(archivo, linea);
			if (archivo.good()) {
				//TODO: Ir calculando MD5 con linea a linea
				this->extraerTerminos(linea, listaTerminos);
			}
		}
		// TODO: Tambien guardar MD5 code
		this->nroUltimoArchivo++;
		archivos<<nroUltimoArchivo<<"|"<<ruta<<std::endl;
	}
	archivo.close();
	return this->nroUltimoArchivo;
}

void ExtratorTerminos::extraerTerminos(std::string& linea, Lista<std::string> * listaTerminos) {
	Lista<std::string> results;
	std::string lineaANormalizar(linea);
	lineaANormalizar = this->texOperator.quitarAcentos(lineaANormalizar);
	lineaANormalizar = this->texOperator.mayus2Minuscula(lineaANormalizar);

	std::string delimitadores = " ;,.¿?¡!";
	this->texOperator.split(lineaANormalizar, delimitadores, results);
	IteradorLista<std::string> itPalabras(&results);
	while (itPalabras.tieneSiguiente()) {
		std::string palabra = itPalabras.siguiente();
		// steam
		listaTerminos->agregar(palabra);
	}
}

ExtratorTerminos::~ExtratorTerminos() {
	this->archivos.close();
}


